/*
Copyright (c) 2008,2009, David Beck

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:

1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

/**
   @file mainpage.hh
   @brief The index page for the doxygen documentation

   @mainpage RT0D4 (Random Thoughts 0n Distributed 4lgorithms)

   @section intro Introduction

   This project is under constant improvements. Right now it is used to
   collect ideas, bits and pieces that I want to use later for real distributed
   applications. As a side effect I developed a new RxRPC security model
   that I think, could be useful for others too. (More on that in rt0d4::rx and rt0d4_rx.h)

   More on the RxRPC related parts can be found here:

   @li @ref rx "Introduction of RxRPC security model"
   @li rt0d4_rx.h

   0.0.4 version now has threading helpers to ease thread programming. they are
   based on pthread, but object-object orinted and they not try to mimic the original
   interface but rather focus on real life scenarios.

   These threading helpers are:

    @li @ref threads "Introduction of thread helpers"
    @li rt0d4::nthread::event (in event.hh)
    @li rt0d4::nthread::pevent (in pevent.hh)
    @li rt0d4::nthread::mutex (in mutex.hh)
    @li rt0d4::nthread::thread (in thread.hh)

    As of 0.0.5 sqlite3 helpers added in order to simplify SQLite3 based database
    management.

    @ref relnotes "Click here for release information."

   @subsection conc Concepts

    The project is developed using C++, but many functions and intrefaces
    have the extern "C" declaration in order to provide C compatibility.

    Most C++ interfaces are using the "pimpl idiom", that hides the
    implementation details, including member variables and helper functions.
    The reason to do that is to minimize dependencies. The internal details
    of the 3rd party software used, are also hidden behind these classes.

   @subsection tests Testing

    Most classes and functions have corresponding test functions. Tests are
    placed into t__* files in the /test/ directories. The goal is to test
    all important aspects of the given class or function, thus minimizing
    the need of debugging.

    Test related namespaces are defined for C++ tests to group the related
    test cases.

    I use valgrind to find memory leaks in the test programs. Sometimes the
    3rd party libraries don't play nicely with valgrind. OpenSSL for example
    have to be compiled with -DPURIFY to suppress errors. zlib also have
    problems. To prevent that zfile introduced a custom allocator. As for Rx
    I haven't find a solution so far to suppress Rx related valgrind errors.

   @section deps Dependencies

    @li @em Cmake is used to build and configure the project
    @li @em Zlib is used in rt0d4::common::zfile for compression
    @li @em Boost pool is used for memory allocation
    @li @em OpenSSL is used for elliptic curve cryptography and blowfish encryption
    @li @em Rx is part of OpenAFS

   @section build Building the software

    To build the software the following steps must be followed:

    @li unpack the package
    @li cd rt0d4
    @li cmake .
    @li make

    There are a few library dependencies that must be met:

    @li OpenSSL >= 0.9.8h
    @li zlib (tested w/1.2.3)
    @li OpenAFS (tested w/ 1.4.6)

    @section lic BSD License
    @code
Copyright (c) 2008,2009, David Beck

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:

1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    @endcode
*/
